package com.losalpes.catalog;

import com.losalpes.persistence.entity.Mueble;
import com.losalpes.persistence.entity.TipoMueble;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.model.SelectItem;

/**
 *
 * @author Camilo Alvarez
 */
public class CatalogBean {

    @EJB
    private ICatalogService catalogService;
    private Mueble mueble = new Mueble();
    private String referencia;
    private double precio;
    private double cantidad;
    private List<Mueble> muebles = new ArrayList<Mueble>();

    public CatalogBean() {
    }

    /**
     * Retorna los muebles
     * @return Lista de muebles
     */
    public List getMuebles() {
        return  catalogService.findAllMuebles();
    }

    /**
     * Retorna los tipos de muebles
     * @return tipos de muebles
     */
    public SelectItem[] getTiposMuebles() {
        TipoMueble[] tipos=  TipoMueble.values();
        SelectItem[] sitems = new SelectItem[tipos.length];
        for (int i = 0; i < sitems.length; i++) {
             sitems[i] = new SelectItem(tipos[i]);
        }
        return sitems;
    }

    /**
     * Retorna los muebles de un determinado tipo de mueble
     * @return Listado de muebles
     */
    public SelectItem[] getMueblesPorTipo(){
        SelectItem[] sitems = new SelectItem[muebles.size()];
        for (int i = 0; i < sitems.length; i++) {
             SelectItem selectItem = new SelectItem(muebles.get(i).getReferencia(),muebles.get(i).getNombre());
             selectItem.setDisabled(false);
             sitems[i] = selectItem;
        }
        return sitems;
 
    }

    /**
     * Adiciona un mueble a la lista de muebles
     * @return null
     */
    public String add() {
        String dimensiones = "Alto: " + String.valueOf(mueble.getAlto()) +
                             "cm, Ancho: " + String.valueOf(mueble.getAncho()) +
                             "cm, Profundidad: " + String.valueOf(mueble.getProfundidad()) +
                             "cm";
        mueble.setDimensiones(dimensiones);
        catalogService.add(mueble);
        mueble = new Mueble();
        return null;
    }

    /**
     * Crea un nuevo mueble
     * @return Mueble
     */
    public Mueble newMueble() {
        return new Mueble();
    }

    /**
     * Retorna un mueble
     * @return Mueble
     */
    public Mueble getMueble() {
        return mueble;
    }

    /**
     * Modifica un mueble
     * @param cMueble
     */
    public void setMueble(Mueble cMueble) {
        this.mueble = cMueble;
    }

    /**
     * Retorna la referencia de un mueble
     * @return referencia
     */
    public String getReferencia() {
        return referencia;
    }


    /**
     *Modifica la referencia de un mueble
     * @param referencia
     */
    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    /**
     * Retorna la cantidad de un mueble en inventario
     * @return cantidad
     */
    public double getCantidad() {
        return cantidad;
    }

    /**
     * Modifica la cantidad de un mueble en inventario
     * @param cantidad
     */
    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }

    /**
     * Retorna el precio de un mueble
     * @return precio
     */
    public double getPrecio() {
        return precio;
    }

    /**
     * Modifica el precio de un mueble
     * @param precio
     */
    public void setPrecio(double precio) {
        this.precio = precio;
    }

    /**
     * Obtiene un mueble según su referencia
     * @return null
     */
    public String findByRef() {
        mueble = (Mueble) catalogService.findByRef(referencia);
        return null;
    }

    /**
     * Obtiene un mueble por tipo
     * @return null
     */
    public String findByType(){
        this.muebles = catalogService.findByType(mueble.getTipo());
        return null;
    }

    /**
     * Modifica un mueble
     * @return null
     */
    public String update(){
        catalogService.update(mueble);
        return null;
    }

    /**
     * Modifica el precio y la cantidad de un mueble
     * @return null
     */
    public String updatePrecioCantidad(){
        String result = this.findByRef();
        System.out.println("precio: " + precio);
        System.out.println("cantidad: " + cantidad);
        mueble.setPrecio(precio);
        mueble.setCantidad(cantidad);
        catalogService.update(mueble);
        return null;
    }

    /**
     * Elimina un mueble
     * @return null
     */
    public String delete() {
        mueble = (Mueble) catalogService.findByRef(referencia);
        catalogService.delete(mueble);
        return null;
    }





}
